Skip to content

チャットルームのトークンゲート

INFO

Trinityにトークンを作成して送信したので、今度はそのトークンを使ってチャットルームをトークンゲートします。これにより、トークンを持っている人のみがチャットルームに入ることができるようになります。

動画チュートリアル

チャットルームをトークンゲートする方法

チャットルームをトークンゲートするためのハンドラーを作成しましょう。このハンドラーは、Action = "Broadcast"タグに応答し、元のチャットルーム用のBroadcastハンドラーを置き換えます。

ステップ1: 同じaosプロセスを開始します。

チュートリアル全体で使用してきた同じaosプロセスを使用していることを確認してください。

ステップ2: chatroom.luaファイルを開きます。

これは、チャットルームチュートリアル中にチャットルームを作成するために使用した同じファイルです。

ステップ3: Broadcastハンドラーを編集します。

元のBroadcastハンドラーを以下のコードに置き換えます:

lua
Handlers.add(
    "Broadcast",
    { Action = "Broadcast" },
    function(m)
        if Balances[m.From] == nil or tonumber(Balances[m.From]) < 1 then
            print("UNAUTH REQ: " .. m.From)
            return
        end
        local type = m.Type or "Normal"
        print("Broadcasting message from " .. m.From .. ". Content: " .. m.Data)
        for i = 1, #Members, 1 do
            ao.send({
                Target = Members[i],
                Action = "Broadcasted",
                Broadcaster = m.From,
                Data = m.Data
            })
        end
    end
)

このハンドラーは、メッセージをチャットルームにブロードキャストする前に、送信者のトークンの残高を確認します。送信者がトークンを持っていない場合、メッセージはブロードキャストされません。

ファイルを保存します。

ステップ4: chatroom.luaファイルをリロードします。

新しいbroadcastハンドラーで元のbroadcastハンドラーを置き換えるには、chatroom.luaファイルをリロードする必要があります。

lua
.load chatroom.lua

ステップ5: トークンゲートのテスト

チャットルームがトークンゲートされたので、メッセージをチャットルームに送信してテストしてみましょう。

元のaosプロセスから

まず、元のaosプロセスからテストします。

lua
Send({ Target = ao.id , Action = "Broadcast", Data = "Hello" })

Expected Results:

{
   output = "Message added to outbox",
   ...
}
Broadcasting message from [Your Process ID]. Content: Hello.
New Message From [Your Process ID]: Action = Broadcasted

別のプロセスIDからのテスト

新しいaosプロセスから

次に、トークンを持っていない新しいaosプロセスからテストしてみましょう。

sh
aos chatroom-no-token # the `chatroom-no-token` is the new process name

まず、チャットルームに登録する必要があります。

lua
.load chatroom.lua
Send({ Target = ao.id, Action = "Register" })

Expected Results:

message added to outbox
New Message From [Your Process ID]: Data = registered

さあ、チャットルームにメッセージを送信してみましょう。

lua
Send({ Target = ao.id , Action = "Broadcast", Data = "Hello?" })

Expected Results:

message added to outbox
UNAUTH REQ: [New Process ID]

ご覧の通り、新しいプロセスにはトークンがないため、メッセージは放送されませんでした。

トリニティに「完了した」と伝えましょう

元の aos プロセスから、チャットルームに「完了した」と言うメッセージを送信します。

lua
Send({ Target = ao.id , Action = "Broadcast", Data = "It is done" })

WARNING

正確なマッチデータと大文字と小文字の区別に注意することが重要です。モーフィアスやトリニティからの応答がない場合は、データやタグの内容を確認してください。

トリニティは、チャットルームがトークンゲートされたことに応じてメッセージを送信します。

予想される結果:

トリニティは、「モーフィアスが正しかったようです。あなたがその人です。私は感心しています。今、あなたはザ・コンストラクトに参加する準備ができました。このチュートリアルを完了した者だけが利用できる独占チャットルームです。今、あなたが使ったのと同じタグ『登録』を使用して、こちらのプロセスIDを使って参加してください: [コンストラクトプロセスID] 幸運を祈ります。 -トリニティ」と言います。さらに、メッセージの後にフッターが続きます。

結論

やりました!チャットルームをトークンゲートすることに成功しました。これにより、このチュートリアルを完全に終了した者だけが入れる『コンストラクト』へのアクセスが解除されました。

おめでとうございます!

素晴らしい才能を示しました。このチュートリアルを楽しんでいただけたことを願っています。あなたは今、ao で自由に構築する準備ができました。